package javacommon.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javacommon.util.Notes;
import jxl.Sheet;
import jxl.Workbook;

import com.tech15.pub.model.PubCost;
import com.tech15.pub.model.PubWzcg;

public class OfficeToolExcel {
	public static Map readExcelByCost(File file){
		Map res = new HashMap();
		List<PubCost> v = new ArrayList<PubCost>();
        try {
        	InputStream ips = new FileInputStream(file);  
            Workbook book = Workbook.getWorkbook(ips);
            Sheet[] sheets = book.getSheets();
            for(int a=0;a<sheets.length;a++){
            	Sheet sheet = sheets[a];
                int rows = sheet.getRows();
    	        int cols = sheet.getColumns();
    	        
    	        Map map = new HashMap();
    	        String[] strs = new String[cols];
    	        for(int k=0;k<cols;k++){
    	        	strs[k] = sheet.getCell(k, 0).getContents();
    	        }
    	        for(int j=0;j<strs.length;j++){
    	        	int key = Notes.getCost(strs[j]);
    	        	if(key != 0){
    	        		map.put(new Integer(key), new Integer(j));
    	        	}
    	        }
    	        for(int i = 1; i < rows; i++) {
    	        	try{
	        			PubCost cost = new PubCost();
	     
	        			cost.setYgbh(sheet.getCell(((Integer) map.get(new Integer(1))).intValue(), i).getContents());
         			    cost.setYgxm(sheet.getCell(((Integer) map.get(new Integer(2))).intValue(), i).getContents());
	        			cost.setCj(sheet.getCell(((Integer) map.get(new Integer(3))).intValue(), i).getContents());
	        			cost.setBz(new Float(sheet.getCell(((Integer) map.get(new Integer(4))).intValue(), i).getContents()));
	        			cost.setDw(sheet.getCell(((Integer) map.get(new Integer(5))).intValue(), i).getContents());							
	        			cost.setYwc(sheet.getCell(((Integer) map.get(new Integer(6))).intValue(), i).getContents());
	        			cost.setQnkbxed(new Float(sheet.getCell(((Integer) map.get(new Integer(7))).intValue(), i).getContents()));
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(8))).intValue(), i).getContents())){
	        				cost.setY1(new Float(sheet.getCell(((Integer) map.get(new Integer(8))).intValue(), i).getContents()));	
	        			}else{
	        				cost.setY1(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(9))).intValue(), i).getContents())){
	        				cost.setY2(new Float(sheet.getCell(((Integer) map.get(new Integer(9))).intValue(), i).getContents()));	
	        			}else{
	        				cost.setY2(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(10))).intValue(), i).getContents())){
	        				cost.setY3(new Float(sheet.getCell(((Integer) map.get(new Integer(10))).intValue(), i).getContents()));	
	        			}else{
	        				cost.setY3(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(11))).intValue(), i).getContents())){
	        				cost.setY4(new Float(sheet.getCell(((Integer) map.get(new Integer(11))).intValue(), i).getContents()));	
	        			}else{
	        				cost.setY4(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(12))).intValue(), i).getContents())){
	        				cost.setY5(new Float(sheet.getCell(((Integer) map.get(new Integer(12))).intValue(), i).getContents()));	
	        			}else{
	        				cost.setY5(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(13))).intValue(), i).getContents())){
	        				cost.setY6(new Float(sheet.getCell(((Integer) map.get(new Integer(13))).intValue(), i).getContents()));	
	        			}else{
	        				cost.setY6(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(14))).intValue(), i).getContents())){
	        				cost.setY7(new Float(sheet.getCell(((Integer) map.get(new Integer(14))).intValue(), i).getContents()));	
	        			}else{
	        				cost.setY7(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(15))).intValue(), i).getContents())){
	        				cost.setY8(new Float(sheet.getCell(((Integer) map.get(new Integer(15))).intValue(), i).getContents()));	
	        			}else{
	        				cost.setY8(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(16))).intValue(), i).getContents())){
	        				cost.setY9(new Float(sheet.getCell(((Integer) map.get(new Integer(16))).intValue(), i).getContents()));	
	        			}else{
	        				cost.setY9(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(17))).intValue(), i).getContents())){
	        				cost.setY10(new Float(sheet.getCell(((Integer) map.get(new Integer(17))).intValue(), i).getContents()));	
	        			}else{
	        				cost.setY10(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(18))).intValue(), i).getContents())){
	        				cost.setY11(new Float(sheet.getCell(((Integer) map.get(new Integer(18))).intValue(), i).getContents()));
	        			}else{
	        				cost.setY11(0f);
	        			}
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(19))).intValue(), i).getContents())){
	        				cost.setY12(new Float(sheet.getCell(((Integer) map.get(new Integer(19))).intValue(), i).getContents()));
	        			}else{
	        				cost.setY12(0f);
	        			}
	     	        	v.add(cost);
	     	        	
    	        	}catch(Exception e){
    	        		book.close();
    	        		e.printStackTrace();
    	        		res.put("msg", (a+1)+"工作区,第"+i+"行数据错误！");
    	        		
    	        		return res;
    	        	}
    	        }
            }
            res.put("data", v);
            book.close();
        }catch(Exception e) {
        	e.printStackTrace();
        	res.put("msg", "文件格式错误，请导入Excel文件！");
    		return res;
        }
        res.put("msg", "true");
		return res;
	}
	
	
	
	public static Map readExcelByWzcg(File file){
		Map res = new HashMap();
		List<PubWzcg> v = new ArrayList<PubWzcg>();
        try {
        	InputStream ips = new FileInputStream(file);  
            Workbook book = Workbook.getWorkbook(ips);
            Sheet[] sheets = book.getSheets();
            for(int a=0;a<sheets.length;a++){
            	Sheet sheet = sheets[a];
                int rows = sheet.getRows();
    	        int cols = sheet.getColumns();
    	        
    	        Map map = new HashMap();
    	        String[] strs = new String[cols];
    	        for(int k=0;k<cols;k++){
    	        	strs[k] = sheet.getCell(k, 0).getContents();
    	        }
    	        for(int j=0;j<strs.length;j++){
    	        	int key = Notes.getWzcg(strs[j]);
    	        	if(key != 0){
    	        		map.put(new Integer(key), new Integer(j));
    	        	}
    	        }
    	        for(int i = 1; i < rows; i++) {
    	        	try{
	        			PubWzcg wzcg = new PubWzcg();
	        			
	        			wzcg.setSqrbh(sheet.getCell(((Integer) map.get(new Integer(1))).intValue(), i).getContents());
	        			wzcg.setSqrxm(sheet.getCell(((Integer) map.get(new Integer(2))).intValue(), i).getContents());
	        			wzcg.setBm(sheet.getCell(((Integer) map.get(new Integer(3))).intValue(), i).getContents());
	        			wzcg.setGwzw(sheet.getCell(((Integer) map.get(new Integer(4))).intValue(), i).getContents());
	        			wzcg.setGzlb(sheet.getCell(((Integer) map.get(new Integer(5))).intValue(), i).getContents());							
	        			wzcg.setYsqksm(sheet.getCell(((Integer) map.get(new Integer(6))).intValue(), i).getContents());
	        			wzcg.setXhgg(sheet.getCell(((Integer) map.get(new Integer(7))).intValue(), i).getContents());
	        			
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(8))).intValue(), i).getContents())){
	        				wzcg.setXdrq(DateTools.getTimestamp(sheet.getCell(((Integer) map.get(new Integer(8))).intValue(), i).getContents(),"yyyy/MM/dd"));
	        			}
	        			wzcg.setCgzq(sheet.getCell(((Integer) map.get(new Integer(9))).intValue(), i).getContents());
	        			
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(10))).intValue(), i).getContents())){
	        				wzcg.setYjdhrq(DateTools.getTimestamp(sheet.getCell(((Integer) map.get(new Integer(10))).intValue(), i).getContents(),"yyyy/MM/dd"));
	        			}
	        			wzcg.setHqbgsm(sheet.getCell(((Integer) map.get(new Integer(11))).intValue(), i).getContents());
	        			
	        			if(StringUtils.notNull(sheet.getCell(((Integer) map.get(new Integer(12))).intValue(), i).getContents())){
	        				wzcg.setSjdhrq(DateTools.getTimestamp(sheet.getCell(((Integer) map.get(new Integer(12))).intValue(), i).getContents(),"yyyy/MM/dd"));
	        			}
	        			
	     	        	v.add(wzcg);
	     	        	
    	        	}catch(Exception e){
    	        		book.close();
    	        		e.printStackTrace();
    	        		res.put("msg", (a+1)+"工作区,第"+i+"行数据错误！");
    	        		
    	        		return res;
    	        	}
    	        }
            }
            res.put("data", v);
            book.close();
        }catch(Exception e) {
        	e.printStackTrace();
        	res.put("msg", "文件格式错误，请导入Excel文件！");
    		return res;
        }
        res.put("msg", "true");
		return res;
	}
}
